/*堆排序*/
void heap_sort(ElemType *arr, int arr_size)
{
	int i;
	
	for(i=arr_size/2; i > 0; i--)
	{
		heap_adjust(arr,i,arr_size);//从最后一个结点开始调整
	}
	
	for(i=arr_size; i > 1; i--)
	{
		swap(arr,1,i);
		heap_adjust(arr,1,,i-1);//从第一个结点开始调整
	}
}

/*交换数据*/
void swap(ElemType *arr,int i,int j)
{
	int temp;
	
	temp = arr[i];
	arr[i] = arr[j];
	arr[j] = temp;
}

/*构造大顶堆*/
void heap_adjust(ElemType *arr,int s,int n)
{
	int i;
	int temp;
	
	temp = arr[s];
	
	for(i=2*s; i < n;i *= 2)
	{
		if(i < n && arr[i] < arr[i+1])
		{
			i++;
		}
		if(temp > arr[i])
		{
			break;
		}
		
		arr[s] = arr[i];
		s = i;
	}
	arr[s] = temp;
}